package admin

import (
	"Walker/app/http/model"
	"Walker/app/http/validator"
	"Walker/app/http/validator/admin"
	"Walker/app/services"
	"Walker/app/utils/data"
	"Walker/app/utils/response"
	"Walker/global"
	"github.com/gin-gonic/gin"
	"strings"
)

type SystemPage struct {
	systemPageService   services.SystemPage
	systemPageModel     model.SystemPage
	systemPageFuncModel model.SystemPageFunc
}

// 	@Tags 页面管理模块
// 	@Summary 页面列表
// 	@Description 页面列表
// 	@Accept json
// 	@Produce json
// 	@Param keywords query string false "关键词"
// 	@Param status query int false "状态1是正常0是异常"
// 	@Success 200 {object} response.JsonResult{data=model.SystemPagePage,total_rows=int}
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_page [get]
//	@Security ApiKeyAuth
func (controller *SystemPage) Index(ctx *gin.Context) {
	list, err := controller.systemPageService.List(ctx)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "查询成功", list)
	return
}

// 	@Tags 页面管理模块
// 	@Summary 添加页面
// 	@Description 添加页面
// 	@Accept json
// 	@Produce json
// 	@Param body body admin.SystemPage true "数据json"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_page [post]
//	@Security ApiKeyAuth
func (controller *SystemPage) Store(ctx *gin.Context) {
	var param admin.SystemPage
	err := validator.Verify(ctx, &param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	err = controller.systemPageService.Edit(param, 0)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "添加成功", "")
	return
}

// 	@Tags 页面管理模块
// 	@Summary 修改页面
// 	@Description 修改页面
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id"
// 	@Param body body admin.SystemPage true "数据json"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_page/{id} [put]
//	@Security ApiKeyAuth
func (controller *SystemPage) Update(ctx *gin.Context) {
	var param admin.SystemPage
	err := validator.Verify(ctx, &param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	err = controller.systemPageService.Edit(param, uint(data.StringToInt(ctx.Param("id"))))
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "修改成功", "")
	return
}

// 	@Tags 页面管理模块
// 	@Summary 删除页面
// 	@Description 删除页面
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id逗号隔开"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_page/{id} [delete]
//	@Security ApiKeyAuth
func (controller *SystemPage) Destroy(ctx *gin.Context) {
	result := global.DB.Delete(&controller.systemPageModel, strings.Split(ctx.Param("id"), ","))
	if result.Error != nil {
		response.Error(ctx, result.Error.Error())
		return
	}
	response.Success(ctx, "删除成功", "")
	return
}

// 	@Tags 页面管理模块
// 	@Summary 查看页面详情
// 	@Description 查看页面详情
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id"
// 	@Success 200 {object} response.JsonResult{data=model.SystemPageFuncList}
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_page/{id} [get]
//	@Security ApiKeyAuth
func (controller *SystemPage) Show(ctx *gin.Context) {
	data, err := controller.systemPageService.Show(data.StringToInt(ctx.Param("id")))
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "查询成功", data)
	return
}

// 	@Tags 页面管理模块
// 	@Summary 删除页面与方法的绑定关系
// 	@Description 删除页面与方法的绑定关系
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "页面与方法的关系id"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_page/del_page_func/{id} [delete]
//	@Security ApiKeyAuth
func (controller *SystemPage) DelPageFunc(ctx *gin.Context) {
	//删除关系
	result := global.DB.Where("id=?", ctx.Param("id")).First(&controller.systemPageFuncModel)
	if result.Error != nil {
		response.Error(ctx, result.Error.Error())
		return
	}
	response.Success(ctx, "删除成功", controller.systemPageModel)
	return
}
